package orbito.physics.motion;

import java.util.List;


public interface Integrator {
	/**
	 * Advances the spatial state of the simulation from time t to time t+dt. When called, the integrator 
	 * should advance the spatial state of its registered actors over time dt, using its set force manager.
	 * 
	 * @param t The current time of the simulation.
	 * @param dt The time that should pass during this step.
	 */
	void integrate(double t, double dt);
	
	/**
	 * Gets the actors on which this integrator is working.
	 * 
	 * @return
	 */
	List<Actor> getActors();
	
	/**
	 * Adds an actor to this integrator.
	 * 
	 * @param actor
	 */
	void addActor(Actor actor);
	
	/**
	 * Removes an actor from this integrator.
	 * 
	 * @param actor
	 */
	void removeActor(Actor actor);
	
	/**
	 * Gets the force manager used by the integrator.
	 * 
	 * @return
	 */
	ForceManager getForceManager();
	
	/**
	 * Sets the force manager used by the integrator.
	 * 
	 * @param forceManager
	 */
	void setForceManager(ForceManager forceManager);
}
